package com.shen.web.action;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.shen.service.BaseService;

/**
 * 基础的action类
 * @author shen
 *
 */
//@ParentPackage(value = "struts-default")
//@Action(value="base-struts2")
//@Results(value = { @Result(name="SUCCESS",location="/result.jsp") })
public class BaseStruts2Action extends ActionSupport {
	private static final long serialVersionUID = -8959628046602110506L;
	
	private static final Logger logger = LoggerFactory.getLogger(BaseStruts2Action.class);
	
	protected BaseService baseService;

	@Override
	public String execute() throws Exception {
		ActionContext.getContext().getSession();
		logger.debug("执行execute方法");
		return SUCCESS;
	}
	
	/**
	 * 在struts.xml配置文件中的action中配置了method=xxx才会执行这个方法，就不用执行execute方法了。
	 * @return
	 */
	public String xxx(){
		return "xxx";
	}
	
	public void validateXxx(){
		// 验证xxx方法。执行完后再执行validate做全局验证，都验证通过才会执行xxx方法。
	}
	
	/**
	 * 继承validate方法，可作服务器端验证。validate是在execute方法之前执行。
	 * 
	 * 一般最好validate方法里什么也不做，放在validateXXX的方法里去验证，因为validateXXX方法是专门只验证xxx方法的
	 * 但是validate是在validateXXX执行完后还要执行的，是验证全局的。所有最好什么也不做。
	 */
	@Override
	public void validate() {
		//TODO 执行验证逻辑
		
		//研究 addActionError 、addFieldError、addActionMessage的方法的区别。
		this.addActionMessage("some messages");
		
		super.validate();
	}
	

	public void setBaseService(BaseService baseService) {
		this.baseService = baseService;
	}
}
